备案域名失效 临时使用境外服务器重定向方案
首先把需要访问的项目nginx主机文件设置成默认hosts
server {
listen 80 default_server;//在监听端口后面添加default_server,设置为默认项目
server_name api.xxxxxxxx.com;
root /home/www/xxxxxxxx/public;
index index.html index.htm index.php;
access_log /data/logs/nginx/xxxxxxxx_access.log main;
error_log /data/logs/nginx/xxxxxxxx.com_error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
$ nginx -t
>>
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -s reload
改完 nginx -t 测试配置文件是否ok,注:一台服务器只允许有一个主机文件是默认的,如果其他文件也存在就会测试失败
没有问题就直接 nginx -s reload 重启nginx
境外服务器重定向配置
server
{
listen 80;
server_name api.xxxxxxxx.cc api.xxxxxxxx.com;
location / {
if ($request_method ~ ^(POST)$) {
proxy_pass http://000.000.000.000;
break;
}
rewrite ^(.*) http://000.000.000.000$1 permanent;
}
}
## rewrite ^(.*) http://000.000.000.000$1 permanent;
## ^ 这行代码表示重定向到这个地址
## $1 permanent < 这两个代表Get请求时的参数
## 但是post请求时这个方法就无效了,因为post请求数据在请求体内,参数不可见,重定向会失去参数
## 所以使用的这行代码 > proxy_pass http://000.000.000.000;
## 这行代码的意思是 nginx 自身调用程序代理请求该地址,post问题解决
$ nginx -t
>>
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ nginx -s reload
一切看似完美,找到公司运维,阐述了伟大的跨国方案,并表示测试已经ok,
运维表示,反正已经挂了,死马当活马医,先改解析试试吧
改完解析,本来说好好的post方法不好使的,请求超时,
向运维大佬解释了post代理原理后,
大佬说:懂了,是我禁用了别人的80端口的请求,所以向其他地方请求的时候,返回结果也可以表示为其他服务器的80端口向本机请求,防火墙给挡住了。
于是大佬啪啪啪,改了防火墙,再测试post ok
## 看不太懂的防火墙配置
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
大概原来解析是这样
- 本来:
备案域名 --解析--》 国内服务器
- 现状:
备案失效域名 ---解析 XX 阿里云挡住了 XX---》 国内服务器
- 临时方案:
备案失效域名 ---解析--》 境外服务器 --- 重定向or代理 ----》国内服务器ip(配置访问默认项目(sdk项目))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。